package com.example.demo2_review.design_pattern.creational_patterns.singleton_pattern;

import cn.hutool.core.bean.BeanUtil;

/**
 * @Author zwp14
 * @create 2024/6/24 18:56
 * @description 双重检查锁-懒加载优化
 * 单例模式确保一个类只有一个实例，并提供一个全局访问点。
 */
public class DoubleCheckedSingleton {
    private static volatile DoubleCheckedSingleton instance;

    private DoubleCheckedSingleton() {
    }

    public DoubleCheckedSingleton getInstance() {
        //第一重检查
        if (BeanUtil.isEmpty(instance)) {
            //锁
            synchronized (DoubleCheckedSingleton.class) {
                //第二重检查
                if (BeanUtil.isEmpty(instance)) {
                    return new DoubleCheckedSingleton();
                }
            }
        }
        return instance;
    }
}
